首页 > 试题广场 >

坐标移动

[编程题]坐标移动
  • 热度指数:563949 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解

开发一个坐标计算工具, A表示向左移动,D表示向右移动,W表示向上移动,S表示向下移动。从(0,0)点开始移动,从输入字符串里面读取一些坐标,并将最终输入结果输出到输出文件里面。

输入:

合法坐标为A(或者D或者W或者S) + 数字(两位以内)

坐标之间以;分隔。

非法坐标点需要进行丢弃。如AA10;  A1A;  $%$;  YAD; 等。

下面是一个简单的例子 如:

A10;S20;W10;D30;X;A1A;B10A11;;A10;

处理过程:

起点(0,0)

+   A10   =  (-10,0)

+   S20   =  (-10,-20)

+   W10  =  (-10,-10)

+   D30  =  (20,-10)

+   x    =  无效

+   A1A   =  无效

+   B10A11   =  无效

+  一个空 不影响

+   A10  =  (10,-10)

结果 (10, -10)

数据范围:每组输入的字符串长度满足 ,坐标保证满足 ,且数字部分仅含正数

输入描述:

一行字符串



输出描述:

最终坐标,以逗号分隔

示例1

输入

A10;S20;W10;D30;X;A1A;B10A11;;A10;

输出

10,-10
示例2

输入

ABC;AKL;DA1;

输出

0,0
a = input()
list1 = a.split(";")
list2 = []
for item in list1:
    if 2 <= len(item) <= 3 and item[1:3].isdigit():
        list2.append(item)
list3 = [0, 0]
for item in list2:
    if item[0:1] == "A":
        list3[0] = list3[0] - int(item[1:])
    if item[0:1] == "D":
        list3[0] = list3[0] + int(item[1:])
    if item[0:1] == "W":
        list3[1] = list3[1] + int(item[1:])
    if item[0:1] == "S":
        list3[1] = list3[1] - int(item[1:])
str1 = str(list3[0]) + "," + str(list3[1])
print(str1)


发表于 2023-08-25 15:45:33 回复(0)
import sys
n=input()

a=n.split(';')
dict=[]
x=0
y=0
for i in a:
    if len(i)==0 or len(i)>3 or len(i)==1:
        a.remove(i)
    elif (i[0].isalpha()) and (i[1:].isdigit()):
        dict.append(i)

for num in dict:
    if num[0]=="D":
        x+=(int(num[1:]))
    elif num[0]=="A":
        x-=(int(num[1:]))
    elif num[0]=="W":
        y+=(int(num[1:]))
    elif num[0]=="S":
        y-=(int(num[1:]))
    else:
        continue
print(x,y,sep=",")
发表于 2023-07-13 12:08:05 回复(0)
import sys
import re

moves = input().strip().split(';')
pattern = re.compile(r'^[ADWS]\d{1,2}$')
for move in moves[:]:
    matches = re.findall(pattern,move)
    # print(matches)
    if not matches&nbs***bsp;move != matches[0]:
        moves.remove(move)
# print(moves)
x = 0
y = 0
for move in moves:
    # print(x,y)
    if move[0] == 'A':
        x -= int(move[1:])
    elif move[0] == 'D':
        x += int(move[1:])
    elif move[0] == 'W':
        y += int(move[1:])
    elif move[0] == 'S':
        y -= int(move[1:])
print(x,y,sep=',')

发表于 2023-04-20 16:41:29 回复(0)
lang={'A':[0,-1],'S':[1,-1],'D':[0,1],'W':[1,1]}
res=[0,0]
cord=list(input().split(';'))

for i in cord:
    if i != '' and i[0] in lang:
        if i.lstrip(i[0]).isdigit():
            res[lang[i[0]][0]]+=(lang[i[0]][1]*int(i.lstrip(i[0])))
print(res[0],res[1],sep=',')
随便写的,没怎么优化
发表于 2023-02-23 18:42:54 回复(0)
start_point = [0,0]
coordinates = input("").split(";")
for coordinate in coordinates:
    if coordinate[:1]=="A" and coordinate[1:].isdigit():
        start_point[0] -= int(coordinate[1:])
    elif coordinate[:1]=="D" and coordinate[1:].isdigit():
        start_point[0] += int(coordinate[1:])
    elif coordinate[:1]=="W" and coordinate[1:].isdigit():
        start_point[1] += int(coordinate[1:])
    elif coordinate[:1]=="S" and coordinate[1:].isdigit():
        start_point[1] -= int(coordinate[1:])
    else:
        continue
print("{},{}".format(start_point[0],start_point[1]))

发表于 2022-09-14 22:43:38 回复(0)
#不用isdigit的方法
a = input().split(";")
num1 = "ASWD"
num2 = "0123456789"
i, j = 0, 0
for ii in a:
    if ii and ii[0] in num1:
        for jj in range(1, len(ii)):
            if ii[jj] not in num2:
                break
            elif jj == len(ii)-1:
                if ii[0] == "A":
                    i -= int(ii[1:])
                elif ii[0] == "S":
                    j -= int(ii[1:])
                elif ii[0] == "W":
                    j += int(ii[1:])
                else:
                    i += int(ii[1:])
print(str(i)+","+str(j))
发表于 2022-09-08 23:11:44 回复(0)
st = input().split(';')
num1=num2=0
for s in st:
    if s[1:].isnumeric():
        if s[0] == 'A':
            s = int(s[1:])
            num1 -= s
            continue
        if s[0] == 'D':
            s = int(s[1:])
            num1 += s
            continue
        if s[0] == 'W':
            s = int(s[1:])
            num2 += s
            continue
        if s[0] == 'S':
            s = int(s[1:])
            num2 -= s
            continue
print(f'{num1},{num2}')

发表于 2022-09-06 13:51:00 回复(0)
a=input().split(';')
b=[0,0]
c=['A','S','W','D']
for i in a:
    if len(i)==3&nbs***bsp;len(i)==2:
         if i[0].upper() in c:
             if i[1:].isdigit():
                if i[0]=='A':
                    b[0]=int(b[0])-int(i[1:])
                elif i[0]=='D':
                    b[0]=int(b[0])+int(i[1:])
                elif i[0]=='W':
                    b[1]=int(b[1])+int(i[1:])
                elif i[0]=='S':
                    b[1]=int(b[1])-int(i[1:])
print(f'{b[0]},{b[1]}')


发表于 2022-09-05 16:38:41 回复(0)
templocation = [0,0]
sum = [0,0]
n = input()
oldlist = n.split(";")
newlist = []
length = len(oldlist)
dic = {"A":[-1,0], "D":[1,0], "W":[0,1], "S":[0,-1]}
for i in range(length):
    if oldlist[i][1:].isdigit():
        if oldlist[i][0] in dic.keys() and 0 <= int(oldlist[i][1:]) <= 99:
            newlist.append(oldlist[i])
for index, items in enumerate(newlist):
    s = dic[items[0]]
    templocation[0] = s[0] * int(newlist[index][1:])
    templocation[1] = s[1] * int(newlist[index][1:])
    sum[0] += templocation[0]
    sum[1] += templocation[1]
print(str(sum[0])+","+str(sum[1]))
发表于 2022-09-03 01:30:42 回复(0)

# python3 正则匹配表达式来捕捉有效坐标,比较长度是否相等来判断是否是合法坐标
import re
while True:
    try:
        str_list = input().split(";")
#         print(str_list)
        str_out = [re.findall("^[ADWS]{1}[0-9]{1,2}", str_) for str_ in str_list]
#         print(str_out)
        str_out = [item for index, item in enumerate(str_out) if len(item) >0 and len(item[0]) == len(str_list[index])]
#         print(str_out)
        a, b = 0, 0
        for i in str_out:
            dire = i[0][0]
            dis = int(i[0][1:])
            if dire == "A":
                a -= dis
            elif dire == "D":
                a += dis
            elif dire == "W":
                b += dis
            elif dire == "S":
                b -=dis
            else:
                pass
        print(f"{a},{b}")
            
    except:
        break
发表于 2022-09-02 09:45:35 回复(0)
import re

while True:
    try:
        str_input = input()
        ori = [0,0]
        cmd_list = str_input.split(";")
        pat = r"^([DWSA])(\d{1,2})$"
        for cmd in cmd_list:
            ma = re.search(pat, cmd)
            if ma:
                d = ma.group(1)
                v = int(ma.group(2))
                if d =='D':
                    ori[0] += v  # 经度右移
                elif d =='A':
                    ori[0] -= v  # 经度左移
                elif d =='W':
                    ori[1] += v  # 纬度上移
                elif d =='S':
                    ori[1] -= v  # 纬度下移
        print(",".join([str(x) for x in ori]))
    except:
        break


发表于 2022-08-30 20:15:31 回复(0)
st = input()
st = st.split(";")
index = [0,0]
def actionIndex(index,st):
    if st[0] == 'A':
        index[0] -= int(st[1:])
    elif st[0] == 'D':
        index[0] += int(st[1:])
    elif st[0] == 'W':
        index[1] += int(st[1:])
    elif st[0] == 'S':
        index[1] -= int(st[1:])
    return index
for s in st:
    if len(s)>=2 and s[0] in ['A','D','W','S'] and s[1:].isdigit() and int(s[1:]) in range(100):
        index = actionIndex(index,s)
print(str(index[0])+","+str(index[1]))
发表于 2022-08-30 04:37:35 回复(0)
point_desp = input()
point_list = point_desp.split(";")
point_x, point_y = 0, 0

for point in point_list:
    if len(point) >= 2:
        if point[0] == "A":            
            try:
                point_x -= int(point[1:])
            except:
                pass
        elif point[0] == "D":            
            try:
                point_x += int(point[1:])
            except:
                pass
        elif point[0] == "W":            
            try:
                point_y += int(point[1:])
            except:
                pass
        elif point[0] == "S":            
            try:
                point_y -= int(point[1:])
            except:
                pass
        else:
            pass
    else:
        pass
print(point_x,",",point_y,sep="")
发表于 2022-08-29 20:56:00 回复(0)
Coordinate = input().replace(';',' ').split()
X,Y = 0,0
verify = ['A','D','W','S']   
for word in range(len(Coordinate)):
    Move = Coordinate[word]
    if len(Move) <= 3 and len(Move) > 1 and Move[0] in verify and Move[1:].isdigit():
        if Move[0] == verify[0]:
            X -= int(Move[1:])
        if Move[0] == verify[1]:
            X += int(Move[1:])
        if Move[0] == verify[2]:
            Y += int(Move[1:])
        if Move[0] == verify[3]:
            Y -= int(Move[1:])  
print('%d,%d' %(X,Y))

发表于 2022-08-29 19:50:18 回复(0)
a = input()
b = a.split(';')
c = []
d = ['W', 'S', 'A', 'D']
x = 0
y = 0
for i in b:
    try:
        if int(i[1:]) < 100:
            if i[0] == 'W':
                y += int(i[1:])
            if i[0] == 'S':
                y -= int(i[1:])
            if i[0] == 'A':
                x -= int(i[1:])
            if i[0] == 'D':
                x += int(i[1:])
    except:
        pass
print(f'{x},{y}')
发表于 2022-08-29 12:41:31 回复(0)
s = input()
li = s.split(';')
x = 0
y = 0
for i in li:
    try:
        if i[0] == 'A' and len(i) <= 3:
            x -= int(i[1:])
        elif i[0] == 'S' and len(i) <= 3:
            y -= int(i[1:])
        elif i[0] == 'W' and len(i) <= 3:
            y += int(i[1:])
        elif i[0] == 'D' and len(i) <= 3:
            x += int(i[1:])
        else:
            continue
    except:
        continue
print(x,end=',')
print(y)

发表于 2022-08-24 13:57:56 回复(0)
import re
horizontal=portrait=0
a=input().split(';')
def cal(direction,num,horizontal,portrait):
    if direction=='A':
        horizontal-=num
    elif direction=='D':
        horizontal+=num
    elif direction=='W':
        portrait+=num
    elif direction=='S':
        portrait-=num
    return horizontal,portrait
         
for i in a:
    if re.search('[a-zA-Z][0-9]{1,2}$',i) and len(set(i))<=3:                
        horizontal,portrait=cal(i[0],int(i[1:]),horizontal,portrait)
print('{},{}'.format(horizontal,portrait))

发表于 2022-08-20 13:18:00 回复(0)
order = input().split(';')
x = 0
y = 0
for i in order:
    if len(i)>1:
        if i[0] in 'ASWD' and i[1:].isdigit():
            if i[0] == 'A':
                x -= int(i[1:])
            elif i[0] == 'S':
                y -= int(i[1:])
            elif i[0] == 'D':
                x += int(i[1:])
            else:
                y += int(i[1:])
print('%d,%d'%(x,y))

发表于 2022-08-18 10:33:42 回复(0)
x, y = 0, 0  #坐标初始值
l1 = 'ADWS'
l2 = list(map(str,input().split(';'))) #记录输入的坐标
l3 = list(filter(None, l2)) #去除l2中的空字符
for i in l3:
    if i[0] in l1 and i[1:].isdigit():  #判断i的首位在‘ADWS’中,并且i[1:]全是数字
        if i[0] == l1[0] : #A
            x -= int(i[1:])
        elif i[0] == l1[1]: #D
            x += int(i[1:])
        elif i[0] == l1[2]: #W
            y += int(i[1:])
        elif i[0] == l1[3]: #S
            y -= int(i[1:])
print(str(x)+','+str(y))

发表于 2022-08-16 14:24:58 回复(0)

问题信息

难度:
130条回答 92827浏览

热门推荐

通过挑战的用户

查看代码